package gui;

import java.awt.Image;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.util.HashMap;
import java.util.Map;
import javax.swing.ImageIcon;


@SuppressWarnings("serial")
public class Personaje extends PanelImagen {

	public static enum gesto {
		CRAZY, DISGRACE, DOH, WOOHOO, READY, IKNOW, SALIVA, YEAH, DONUT
	};

	private Map<gesto, Image> backgrounds;

	private gesto actual;
	
	public Personaje() {
		super();
		actual = gesto.YEAH;
		crearPersonaje();
		definirGesto();
	}
	
	private void crearPersonaje(){
	
		setPreferredSize(new Dimension(380, 520));
		setLayout(new BorderLayout(0, 0));

		// Cargando imagenes del personaje
		ImageIcon imgCrazy = new ImageIcon("img/adivino/homerinator_crazy.png");
		ImageIcon imgDisgrace = new ImageIcon(
				"img/adivino/homerinator_disgrace.png");
		ImageIcon imgDoh = new ImageIcon("img/adivino/homerinator_doh.png");
		ImageIcon imgWooHoo = new ImageIcon(
				"img/adivino/homerinator_woohoo.png");
		ImageIcon imgReady = new ImageIcon("img/adivino/homerinator_ready.png");
		ImageIcon imgIKnow = new ImageIcon("img/adivino/homerinator_iknow.png");
		ImageIcon imgSaliva = new ImageIcon(
				"img/adivino/homerinator_saliva.png");
		ImageIcon imgYeah = new ImageIcon("img/adivino/homerinator_yeah.png");
		ImageIcon imgDonut = new ImageIcon("img/adivino/homerinator_donut.png");

		// Mapeando las imagenes por gestos 
		backgrounds = new HashMap<gesto, Image>();
		backgrounds.put(gesto.CRAZY, imgCrazy.getImage());
		backgrounds.put(gesto.DISGRACE, imgDisgrace.getImage());
		backgrounds.put(gesto.DOH, imgDoh.getImage());
		backgrounds.put(gesto.DONUT, imgDonut.getImage());
		backgrounds.put(gesto.IKNOW, imgIKnow.getImage());
		backgrounds.put(gesto.SALIVA, imgSaliva.getImage());
		backgrounds.put(gesto.YEAH, imgYeah.getImage());
		backgrounds.put(gesto.WOOHOO, imgWooHoo.getImage());
		backgrounds.put(gesto.READY, imgReady.getImage());
		
	}

	// Intercambia los gestos uno a uno
	public void intercambiarGesto() {
		switch (actual) {
		case CRAZY:
			actual = gesto.DISGRACE;
			break;
		case DISGRACE:
			actual = gesto.DOH;
			break;
		case DOH:
			actual = gesto.WOOHOO;
			break;
		case WOOHOO:
			actual = gesto.READY;
			break;
		case READY:
			actual = gesto.IKNOW;
			break;
		case IKNOW:
			actual = gesto.SALIVA;
			break;
		case SALIVA:
			actual = gesto.YEAH;
			break;
		case YEAH:
			actual = gesto.DONUT;
			break;
		case DONUT:
			actual = gesto.CRAZY;
			break;
		}

		definirGesto(actual);
	}

	public void definirGesto() {
		definirGesto(actual);
	}

	/** Asgina una imagen al panel a partir de un gesto dado. */
	public Personaje definirGesto(Personaje.gesto gesto) {
		if (backgrounds.containsKey(gesto)) {
			this.setBackground(backgrounds.get(gesto));
		}
		return this;
	}
}
